home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / alienbreed3d2 / cheesesauce / cd.s < prev    next >
Text File  |  1997-11-28  |  4KB  |  364 lines

  1. ;
  2. ; cd.s - cd player for AB3D (C)opyright 1995 Team17 Ltd - Charlie
  3. ; $Log: $
  4. ;
  5. ;
  6.  
  7.  
  8.     opt    O+,P=68020
  9.  
  10.     include "workbench:utilities/devpac/system.gs"
  11.  
  12. ;    INCLUDE utils:sysinc/exec_lib.i        ; change this for your path!.
  13.     INCLUDE utils:sysinc/exec/io.i
  14.     INCLUDE utils:sysinc/devices/cd.i
  15.  
  16.     INCLUDE utils:sysinc/exec/lists.i
  17.  
  18.  
  19. _test
  20.     bsr    _InitCD
  21.     move.l d0,doneit
  22.     tst.l    d0
  23.     beq.s    .BadOpen
  24.  
  25.     moveq    #1,d0
  26.     bsr    _PlayCD
  27.     
  28. .waitforstop:
  29.     btst #6,$bfe001
  30.     bne.s .waitforstop
  31.     
  32.     bsr    _StopCD
  33.     bsr    _CloseCD
  34.  
  35.     moveq    #0,d0
  36.  
  37.  
  38. .BadOpen
  39.     rts
  40.  
  41.  
  42. ; end test routine..
  43.  
  44. doneit: dc.l 0
  45.  
  46.  
  47.     XDEF    _InitCD
  48.  
  49. _InitCD
  50.  
  51. ; setup execbase 
  52.  
  53.     lea    Data(pc),a4
  54.     move.l    4.w,_ExecBase-Data(a4)
  55.     move.l    _ExecBase(pc),a6
  56.  
  57. ; setup port 
  58.  
  59.     sub.l    a0,a0
  60.     moveq    #0,d0
  61.     jsr    _CreatePort
  62.     tst.l    d0
  63.     beq.b    .PortError
  64.  
  65.     move.l    d0,_CDPort-Data(a4)        ; MsgPort for cd.device
  66.  
  67. ; Create first extended io port
  68.  
  69.     move.l    d0,a0
  70.     moveq    #IOSTD_SIZE,d0        ; sizeof strct IORequest
  71.     jsr    _CreateExtIO
  72.     tst.l    d0
  73.     beq.b    .PortError
  74.  
  75.     move.l    d0,_CDReq0-Data(a4)
  76.  
  77. ; Create second extended io port
  78.  
  79.     move.l    _CDPort(pc),a0
  80.     moveq    #IOSTD_SIZE,d0
  81.     jsr    _CreateExtIO
  82.     tst.l    d0
  83.     beq.b    .PortError
  84.  
  85.     move.l    d0,_CDReq1-Data(a4)        ; second EXTIO
  86.  
  87. ; open device..
  88.  
  89.     lea    _CDDev(pc),a0
  90.     moveq    #0,d0                ; unit number
  91.     move.l    _CDReq0(pc),a1
  92.     moveq    #0,d1                ; flags.
  93.     jsr    _LVOOpenDevice(a6)
  94.     tst.l    d0
  95.     beq.b    .PortOk
  96.     bra.b    .PortError
  97.  
  98. .PortOk
  99.     move.l    _CDReq0(pc),a0
  100.     move.l    _CDReq0(pc),a1
  101.  
  102. ; copy _CDReq0 -> _CDReq1
  103.  
  104.     moveq    #20/4,d0
  105. .loop
  106.     move.l    (a0),(a1)
  107.     dbra    d0,.loop
  108.  
  109.  
  110.     moveq    #1,d0                ; return value
  111.     move.l    d0,_CDAvail-Data(a4)
  112.     rts
  113.  
  114. .PortError
  115.     moveq    #0,d0                ; return value for error..
  116.     move.l    d0,_CDAvail-Data(a4)
  117.     rts
  118.  
  119.  
  120.     XDEF    _PlayCD
  121.  
  122. _PlayCD
  123.  
  124.     lea    Data(pc),a4
  125.  
  126.  
  127.     cmp.l    #0,_CDAvail-Data(a4)
  128.     bne.b    .CDOk
  129.  
  130.     moveq    #0,d0
  131.     rts
  132.  
  133. .CDOk
  134.     move.l    d0,-(sp)
  135.  
  136. ; kill any current activity..
  137.  
  138.     bsr.b    _StopCD
  139.  
  140.     move.l    _CDReq0(pc),a1
  141.     move.w    #CD_PLAYTRACK,IO_COMMAND(a1)
  142.     move.l    (sp)+,d0
  143.  
  144.     move.l    d0,IO_OFFSET(a1)        ; play from
  145.     move.l    #1,IO_LENGTH(a1)        ; number of tracks to play for
  146.  
  147.     move.l    _ExecBase(pc),a6
  148.     jsr    _LVOSendIO(a6)
  149.  
  150.  
  151.     rts
  152.  
  153.  
  154.     XDEF    _StopCD
  155.  
  156. _StopCD
  157.  
  158.     lea    Data(pc),a4
  159.  
  160. ; check if CDReq0 is being used or not...
  161.  
  162.     move.l    _CDReq0(pc),a1
  163.     move.l    _ExecBase(pc),a6
  164.     jsr    _LVOCheckIO(a6)
  165.     tst.l    d0
  166.     bne.b    .NotUsed
  167.  
  168.     jsr    _LVOAbortIO(a6)
  169. .NotUsed
  170.  
  171.  
  172.     rts
  173.  
  174.  
  175.     XDEF    _CloseCD
  176.  
  177. _CloseCD
  178.  
  179.     move.l    _CDReq0(pc),a1
  180.     move.l    _ExecBase(pc),a6
  181.     jsr    _LVOCloseDevice(a6)
  182.  
  183.     move.l    _CDReq0(pc),a0
  184.     jsr    _DeleteExtIO
  185.     
  186.     rts
  187.  
  188.     XDEF    _CDPos
  189.  
  190. _CDPos
  191.     lea    Data(pc),a4
  192.  
  193. ; check if CDReq0 is being used or not...
  194.  
  195.     move.l    _CDReq0(pc),a1
  196.     move.l    _ExecBase(pc),a6
  197.     jsr    _LVOCheckIO(a6)
  198.     tst.l    d0
  199.     bne.b    .NotUsed
  200.     moveq    #-1,d0
  201.  
  202. .NotUsed
  203.         
  204.     rts
  205.  
  206.  
  207.  
  208. _CreatePort
  209.     movem.l    d2-d5/a2,-(sp)
  210.     move.l    $18(sp),d3
  211.     move.b    $1F(sp),d2
  212.     moveq    #-1,d5
  213.     move.l    d5,d0
  214.     move.l    _ExecBase(pc),a6
  215.     jsr    _LVOAllocSignal(a6)
  216.  
  217.     move.l    d0,d4
  218.     ble.s    .L6
  219.  
  220.     move.l    #$10001,d1
  221.     moveq    #$22,d0
  222.     jsr    _LVOAllocMem(a6)
  223.  
  224.     move.l    d0,a2
  225.     move.l    a2,d5
  226.     beq.s    .L7
  227.  
  228.     move.l    d3,10(a2)
  229.     move.b    d2,9(a2)
  230.     move.b    #4,8(a2)
  231.     clr.b    14(a2)
  232.     move.b    d4,15(a2)
  233.     sub.l    a1,a1
  234.     jsr    _LVOFindTask(a6)
  235.  
  236.     move.l    d0,$10(a2)
  237.     tst.l    d3
  238.     beq.s    .L4
  239.  
  240.     move.l    a2,a1
  241.     jsr    _LVOAddPort(a6)
  242.  
  243.     bra.s    .L12
  244.  
  245. .L4
  246.     move.l    $14(a2),a0
  247.     NEWLIST a0
  248.  
  249. .L12
  250.     move.l    a2,d0
  251.     bra.s    .L1
  252.  
  253. .L7
  254.     move.l    d4,d0
  255.     jsr    _LVOFreeSignal(a6)
  256.  
  257. .L6
  258.     moveq    #0,d0
  259. .L1
  260.     movem.l    (sp)+,d2-d5/a2
  261.     rts
  262.  
  263. _DeletePort
  264.     move.l    a2,-(sp)
  265.     move.l    8(sp),a2
  266.     tst.l    10(a2)
  267.     beq.s    .L14
  268.  
  269.     move.l    a2,a1
  270.     move.l    _ExecBase(pc),a6
  271.     jsr    _LVORemPort(a6)
  272.  
  273. .L14
  274.     move.b    #$FF,8(a2)
  275.     moveq    #-1,d0
  276.     move.l    d0,$14(a2)
  277.     moveq    #0,d0
  278.     move.b    15(a2),d0
  279.     jsr    _LVOFreeSignal(a6)
  280.  
  281.     move.l    #$22,a1
  282.     move.l    a2,d0
  283.  
  284.     jsr    _LVOFreeMem(a6)
  285.  
  286.     move.l    (sp)+,a2
  287.     rts
  288.  
  289.  
  290. _CreateExtIO
  291.     movem.l    d2-d4,-(sp)
  292.     move.l    $10(sp),d2
  293.     move.l    $14(sp),d3
  294.     tst.l    d2
  295.     beq.s    .L3
  296.  
  297.     move.l    #$10001,d1
  298.     move.l    d3,d0
  299.     move.l    _ExecBase(pc),a6
  300.     jsr    _LVOAllocMem(a6)
  301.  
  302.     move.l    d0,a0
  303.     move.l    a0,d4
  304.     beq.s    .L3
  305.  
  306.     move.b    #7,8(a0)
  307.     move.w    d3,$12(a0)
  308.     move.l    d2,14(a0)
  309.     move.l    a0,d0
  310.     bra.s    .L1
  311.  
  312. .L3
  313.     moveq    #0,d0
  314. .L1
  315.     movem.l    (sp)+,d2-d4
  316.     rts
  317.  
  318. _DeleteExtIO
  319.     move.l    4(sp),a0
  320.     move.l    a0,d0
  321.     beq.s    .L10
  322.     moveq    #-1,d0
  323.     move.l    d0,(a0)
  324.     moveq    #-1,d0
  325.     move.l    d0,$14(a0)
  326.     moveq    #0,d0
  327.     move.w    $12(a0),d0
  328.     move.l    a0,a1
  329.  
  330.     move.l    _ExecBase(pc),a6
  331.     jsr    _LVOFreeMem(a6)
  332.  
  333. .L10
  334.     rts
  335.  
  336.  
  337. ;            Data Section
  338.  
  339. Data
  340.     CNOP    0,4
  341.  
  342. _ExecBase
  343.     dc.l    0
  344.  
  345. _CDAvail
  346.     dc.l    0
  347.  
  348. _CDPort
  349.     dc.l    0
  350.  
  351. _CDReq0
  352.     dc.l    0
  353.  
  354. _CDReq1
  355.     dc.l    0
  356.  
  357. _QCode
  358.     dcb.b    10000,0
  359.  
  360. _CDDev:
  361.     dc.b    "cd.device",0
  362.  
  363.     END
  364.